package com.huitone.gddw.service;

import com.huitone.gddw.dao.entity.SvrRouteRule;
import com.huitone.gddw.model.support.Message;
import com.huitone.gddw.model.support.QueryPage;
import com.huitone.gddw.service.dto.GateSvrLevelDTO;
import com.huitone.gddw.service.dto.SvrGateLevelDTO;
import com.huitone.gddw.service.dto.SvrRouteRuleDTO;

import java.util.List;
import java.util.Map;

/**
 * 短信业务路由规则 接口
 * @author wuluodan
 *
 */
public interface ISvrRouteRuleService {

	/**
	 * 分页查询
	 * @param page QueryPage
	 * @return QueryPage
	 */
	QueryPage<SvrRouteRuleDTO> selectPage(QueryPage<SvrRouteRule> page);
	
	/**
	 * 根据主键查询唯一记录
	 * @param ruleId 规则ID
	 * @return SvrRouteRule
	 */
	SvrRouteRule selectByPrimaryKey(String ruleId);
	
	/**
	 * 根据主键获取修改页面数据
	 * @param ruleId 规则ID
	 * @return SvrRouteRuleDTO
	 */
	SvrRouteRuleDTO toUpdate(String ruleId);
	
	/**
	 * 更新
	 * @param entity SvrRouteRule
	 */
	void changeStatus(SvrRouteRule entity);
	
	/**
	 * 保存
	 * @param entity SvrRouteRule
	 */
	void save(SvrRouteRule entity);
	
	/**
	 * 更新
	 * @param entity SvrRouteRule
	 */
	void update(SvrRouteRule entity);
	
	/**
	 * 根据主键删除记录
	 * @param ruleId 规则ID
	 */
	void delete(String ruleId);
	
	/**
	 * 根据条件获取记录
	 * @param params 查询参数
	 * @return List
	 */
	List<SvrRouteRuleDTO> getRecord(Map<String, Object> params);
	
	/**
	 * 根据通道ID获取
	 * @param gateLinkId 通道ID
	 * @return List<SvrRouteRule>
	 */
	List<SvrRouteRule> getByGateLinkId(String gateLinkId);
	
	/**
	 * 根据业务类型查询已被设置的通道ID
	 * @param serviceCode 业务类型
	 * @return List<String>
	 */
	List<String> getGateIdByService(String serviceCode);

	/**
	 * 根据短信类型查询路由的通道
	 * @param serviceCode
	 * @return
	 */
	List<SvrRouteRule> getByServiceCode(String serviceCode,String gateLinkId);
	
	/**
	 * 查询与通道对应的业务端
	 * @param page
	 * @return
	 */
	QueryPage<SvrGateLevelDTO> selectPageByServiceCode(QueryPage<SvrRouteRule> page);
	
	/**
	 * 保存路由通道信息
	 * @param entity
	 * @param type
	 * @return
	 */
	Message saveRouteGate(SvrGateLevelDTO entity, String type);
	
	/**
	 * 根据业务端获取路由通道信息
	 * @param svrNode
	 * @return
	 */
	SvrGateLevelDTO getRouteGate(String svrNode);
	
	/**
	 * 根据业务端删除路由通道信息
	 * @param svrNode
	 */
	void deleteByServiceCode(String serviceCode);
	
	/**
	 * 根据通道查询
	 * @param page
	 * @return
	 */
	QueryPage<GateSvrLevelDTO> selectPageByGateLinkId(QueryPage<SvrRouteRule> page);
	
	/**
	 * 根据通道获取路由通道信息
	 * @param gateLinkId
	 * @return
	 */
	GateSvrLevelDTO getRouteGateByGateLinkId(String gateLinkId);
	
	/**
	 * 根据通道Id删除路由通道信息
	 * @param gateLinkId
	 */
	void deleteByGateLinkId(String gateLinkId);
	
	Message saveRouteGate2(GateSvrLevelDTO entity, String type);
}
